package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.model.product.BaseCategoryTrademark;
import com.atguigu.gmall.model.product.BaseTrademark;
import com.atguigu.gmall.model.product.CategoryTrademarkVo;
import com.atguigu.gmall.product.mapper.BaseCategoryTrademarkMapper;
import com.atguigu.gmall.product.mapper.BaseTradeMarkMapper;
import com.atguigu.gmall.product.service.BaseCategoryTrademarkService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 里
 */
@Service
public class BaseCategoryTrademarkServiceImpl extends ServiceImpl<BaseCategoryTrademarkMapper,BaseCategoryTrademark> implements BaseCategoryTrademarkService {
    //注入mapper层
    @Autowired
    private BaseTradeMarkMapper baseTradeMarkMapper;

    @Autowired
    private BaseCategoryTrademarkMapper baseCategoryTrademarkMapper;


    //根据分类Id获取品牌集合列表
    @Override
    public List<BaseTrademark> findTrademarkList(Long category3Id) {

        QueryWrapper<BaseCategoryTrademark> baseCategoryTrademarkQueryWrapper = new QueryWrapper<>();
        baseCategoryTrademarkQueryWrapper.eq("category3_id",category3Id);
        //  根据分类id 获取品牌id集合数据
        List<BaseCategoryTrademark> baseCategoryTrademarkList = baseCategoryTrademarkMapper.selectList(baseCategoryTrademarkQueryWrapper);

        //判断集合
        if (!CollectionUtils.isEmpty(baseCategoryTrademarkList)){
            // 如果集合不为空，获取集合中的 品牌id集合数据，将拿到的集合转为list集合
            List<Long> tradeMarkIdList = baseCategoryTrademarkList.stream().map(baseCategoryTrademark -> {
                return baseCategoryTrademark.getTrademarkId();
            }).collect(Collectors.toList());
            // 根据品牌id集合来获取数据
           return  baseTradeMarkMapper.selectBatchIds(tradeMarkIdList);
        }
        // 如果集合为空，则默认返回空
        return null;
    }

    //删除分类与品牌的关联数据
    @Override
    public void removeBaseCategoryTrademarkById(Long category3Id, Long trademarkId) {
        QueryWrapper<BaseCategoryTrademark> baseCategoryTrademarkQueryWrapper = new QueryWrapper<>();
        baseCategoryTrademarkQueryWrapper.eq("category3_id",category3Id);
        baseCategoryTrademarkQueryWrapper.eq("trademark_id",trademarkId);
        baseCategoryTrademarkMapper.delete(baseCategoryTrademarkQueryWrapper);
    }

    // 根据三级分类id获取未关联的品牌数据集合
    @Override
    public List<BaseTrademark> findCurrentTrademarkList(Long category3Id) {
        //获取已关联的品牌Id
        QueryWrapper<BaseCategoryTrademark> baseCategoryTrademarkQueryWrapper = new QueryWrapper<>();
        baseCategoryTrademarkQueryWrapper.eq("category3_id",category3Id);
        //  根据分类id 获取品牌id集合数据 通过分类di获取对应的集合数据
        List<BaseCategoryTrademark> baseCategoryTrademarkList = baseCategoryTrademarkMapper.selectList(baseCategoryTrademarkQueryWrapper);

        if (!CollectionUtils.isEmpty(baseCategoryTrademarkList)) {
            // 如果集合不为空，获取集合中的 品牌id集合数据，将拿到的集合转为list集合
            List<Long> tradeMarkIdList = baseCategoryTrademarkList.stream().map(baseCategoryTrademark -> {
                return baseCategoryTrademark.getTrademarkId();
            }).collect(Collectors.toList());
            //再所有的品牌id中将已关联的去掉
            List<BaseTrademark> baseTrademarkList = baseTradeMarkMapper.selectList(null).stream().filter(baseTrademark -> {
                //返回不包含在这个集合中的品牌id的数据集合
                return !tradeMarkIdList.contains(baseTrademark.getId());
            }).collect(Collectors.toList());
            // 返回数据
            return baseTrademarkList;
        }
        //如果这个3级分类id下没有任何品牌 则获取到所有的品牌数据返回
        return baseTradeMarkMapper.selectList(null);
    }

    //保存分类id与品牌数据的对应关系
    @Override
    public void save(CategoryTrademarkVo categoryTrademarkVo) {

        // 获取到品牌id 集合数据
        List<Long> trademarkIdList = categoryTrademarkVo.getTrademarkIdList();
        //外层创建一个集合对象
        ArrayList<BaseCategoryTrademark> baseCategoryTrademarkList = new ArrayList<>();

        // 判断集合
        if (!CollectionUtils.isEmpty(trademarkIdList)) {
            for (Long trademarkId : trademarkIdList) {
                // 创建一个分类id 与 品牌id 关联的 对象
                BaseCategoryTrademark baseCategoryTrademark = new BaseCategoryTrademark();
                baseCategoryTrademark.setCategory3Id(categoryTrademarkVo.getCategory3Id());
                baseCategoryTrademark.setTrademarkId(trademarkId);
                //将每个集合的对象加入到集合中
                baseCategoryTrademarkList.add(baseCategoryTrademark);
            }
            // 将新得到的集合集中保存到数据库
            this.saveBatch(baseCategoryTrademarkList);
        }
    }



}
